home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib14.dsk / TIME TEACHER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  10KB  |  175 lines

  1. 10  REM  ::::::::::::::::::::::::
  2. 20  REM  ::    TIME TEACHER    ::
  3. 30  REM  ::   BY RUDY A. GUY   ::
  4. 40  REM  :: COPYRIGHT (C) 1983 ::
  5. 50  REM  :: BY MICROSPARC, INC ::
  6. 60  REM  :: LINCOLN, MA  01773 ::
  7. 70  REM  ::::::::::::::::::::::::
  8. 80  IF  PEEK(104) = 64  THEN 130
  9. 90  POKE 103,1: POKE 104,64: POKE 16384,0
  10. 100  PRINT  CHR$(4);"RUN TIME TEACHER"
  11. 120  REM  CHECK SLOTS FOR TIME CLOCK
  12. 130  FOR I = 1 TO 7
  13. 140 SA = 49152 +256 *I
  14. 150  IF ( PEEK(SA) + PEEK(SA) < >16)  THEN 190
  15. 160  IF ( PEEK(SA +1) + PEEK(SA +1) < >240)  THEN 190
  16. 170  IF ( PEEK(SA +2) + PEEK(SA +2) < >80)  THEN 190
  17. 180 CL = 1: GOTO 210
  18. 190  NEXT I
  19. 200 CL = 0
  20. 210  REM  INITIALIZE VARIABLES
  21. 220  DIM C%(15),LX%(15),LY%(15),X%(60),Y%(60),HX%(36),HY%(36)
  22. 230  FOR I = 1 TO 15: READ C%(I),LX%(I),LY%(I): NEXT 
  23. 240  FOR I = 1 TO 60: READ X%(I),Y%(I): NEXT : FOR I = 1 TO 36: READ HX%(I),HY%(I): NEXT 
  24. 250  REM  INITIALIZE SOUND ROUTINE
  25. 260  GOSUB 1750
  26. 270  REM  BLOAD SHAPE TABLE AT $1000
  27. 280  PRINT  CHR$(4)"BLOAD TIME.OBJ,A$1000"
  28. 290  POKE 232,0: POKE 233,16
  29. 300  HGR : TEXT : HOME 
  30. 310  SCALE= 1: ROT= 0: HCOLOR= 3
  31. 320  INVERSE : VTAB 2: FOR I = 1 TO 40: PRINT " ";: NEXT : NORMAL 
  32. 330  VTAB 5:A$ = "THE TIME TEACHER": INVERSE : GOSUB 1530: NORMAL : PRINT 
  33. 340 A$ = "BY:RUDY A. GUY": GOSUB 1530: PRINT 
  34. 350 A$ = "(C) COPYRIGHT 1983  MICROSPARC, INC.": GOSUB 1530: PRINT : INVERSE : FOR I = 1 TO 40: PRINT " ";: NEXT : NORMAL 
  35. 360  PRINT : PRINT "<-- MOVES CLOCK HANDS COUNTERCLOCKWISE  --> MOVES CLOCK HANDS CLOCKWISE": PRINT : PRINT "(RETURN) PLACES HAND ON CLOCK"
  36. 370  PRINT : PRINT "FIRST SET THE HOUR HAND AND THEN THE    MINUTE HAND."
  37. 380  VTAB 23: FLASH :A$ = "PLEASE WAIT WHILE I DRAW YOUR CLOCK.": GOSUB 1530: NORMAL 
  38. 390  REM  DRAW CLOCK WHILE DIRECTIONS ARE DISPLAYED. THIS TAKES ABOUT 40 SECONDS.
  39. 400  REM  ROUTINE TO DRAW CIRCLE FOR CLOCK
  40. 410 X = 135:Y = 88:R = 65
  41. 420  FOR I = 7.5 TO 1  STEP  -.01: HPLOT  SIN(I) *R +X, COS(I) *R +Y
  42. 430  NEXT 
  43. 440  GOSUB 1480: POKE  -16304,0
  44. 450  HOME : GOSUB 1310
  45. 460  IF M% = 60  THEN M% = 0
  46. 470 T$ =  STR$(M%): IF  LEN(T$) <2  THEN T$ = "0" +T$
  47. 480 T$ =  STR$(H%) +":" +T$:A$ = "THE TIME IS " +T$: VTAB 22: GOSUB 1530
  48. 490 TR = 10: FOR I = 1 TO 5000: NEXT 
  49. 500  HCOLOR= 0: GOSUB 1340
  50. 510  HOME : VTAB 22: INPUT "PLEASE ENTER YOUR NAME :";NA$: IF NA$ = ""  THEN 510
  51. 520  IF CL = 0  THEN R =  LEN(NA$) + ASC(NA$):R =  RND(R * -1): REM  SEEN RANDOM NUMBER GENERATOR IF NO CLOCK CARD IS FOUND.
  52. 530 C = 0:T = 0: HOME 
  53. 540 RH% =  INT( RND(1) *12) +1:RM% =  INT( RND(1) *60)
  54. 550 T$ =  STR$(RM%)
  55. 560  IF  LEN(T$) <2  THEN T$ = "0" +T$
  56. 570  IF RM% = 0  THEN RM% = 60
  57. 580 T$ =  STR$(RH%) +":" +T$
  58. 590 A$ = "SET THE CLOCK TO " +T$ +".": VTAB 21: CALL  -958: INVERSE : GOSUB 1530: NORMAL 
  59. 600  HCOLOR= 3: HPLOT 135,86 TO 135,88: HPLOT 134,87 TO 136,87
  60. 610  FOR I = 1616 TO 1655: IF  PEEK(I) = 160  THEN  POKE I,32
  61. 620  NEXT 
  62. 630  INVERSE : PRINT "PLEASE PLACE THE HOUR HAND ON THE CLOCK.": NORMAL 
  63. 640  IF RM% <20  OR RM% = 60  THEN OS = 0
  64. 650  IF RM% > = 20  AND RM% <40  THEN OS = 1
  65. 660  IF RM% > = 40  AND RM% <60  THEN OS = 2
  66. 670 HO = 12:L = 34 +OS: GOSUB 1200
  67. 680  POKE 34,22: HOME : GOSUB 1220
  68. 690 TL = 0
  69. 700 X =  PEEK( -16384)
  70. 710  IF X = 149  THEN L = L +3:HO = HO +1: IF HO >12  THEN HO = 1:L = 1 +OS: GOSUB 1150: GOTO 700
  71. 720  IF X = 149  THEN  GOSUB 1150: GOTO 700
  72. 730  IF X = 136  THEN L = L -3:HO = HO -1: IF HO <1  THEN HO = 12:L = 34 +OS: GOSUB 1150: GOTO 700
  73. 740  IF X = 136  THEN  GOSUB 1150: GOTO 700
  74. 750  IF X = 141  THEN  POKE  -16368,0: GOSUB 1240:SH% = HO: GOTO 780
  75. 760 TL = TL +1: IF TL/7 =  INT(TL/7)  THEN Y =  PEEK( -16336):TL = 0
  76. 770  GOTO 700
  77. 780  IF SH% = RH%  THEN  GOSUB 1550
  78. 790 L = 60:TL = 0: GOSUB 1050
  79. 800  INVERSE : VTAB 22: PRINT "PLEASE PUT THE MINUTE HAND ON THE CLOCK.": NORMAL 
  80. 810 X =  PEEK( -16384)
  81. 820  IF X = 149  THEN L = L +1: IF L >60  THEN L = 1: GOSUB 1000: GOTO 810
  82. 830  IF X = 149  THEN  GOSUB 1000: GOTO 810
  83. 840  IF X = 136  THEN L = L -1: IF L <1  THEN L = 60: GOSUB 1000: GOTO 810
  84. 850  IF X = 136  THEN  GOSUB 1000: GOTO 810
  85. 860  IF X = 141  THEN  POKE  -16384,0: GOSUB 1110:SM% = L: GOTO 890
  86. 870 TL = TL +1: IF TL/7 =  INT(TL/7)  THEN Y =  PEEK( -16336):TL = 0
  87. 880  GOTO 810
  88. 890  POKE 34,20: IF SM% = RM%  AND SH% = RH%  THEN C = C +1:T = T +1: GOTO 920
  89. 900 T = T +1: GOSUB 1570
  90. 910  HOME :A$ = "I'M SORRY, THAT IS INCORRECT.": VTAB 22: GOSUB 1530:A$ = "PLEASE TRY AGAIN.": GOSUB 1530: FOR I = 1 TO 3000: NEXT : GOSUB 1290: HOME : GOTO 590
  91. 920  HOME :A$ = "THAT IS CORRECT " +NA$: FLASH : VTAB 23: GOSUB 1530: NORMAL 
  92. 930  FOR J = 1 TO 10: GOSUB 1480: GOSUB 1590: NEXT : FOR J = 1 TO 100: POKE  -16298,0: POKE  -16297,0: NEXT 
  93. 940  IF T <TR  THEN  FOR I = 1 TO 3000: NEXT : GOSUB 1290: HOME : GOTO 540
  94. 950  POKE  -16368,0
  95. 960  FOR I = 1 TO 3000: NEXT :A$ = "YOU GOT " + STR$(C) +" CORRECT OUT": GOSUB 1530:A$ = "OF " + STR$(T) +" TRIES " +NA$ +".": GOSUB 1530
  96. 970  PRINT : INPUT "WOULD YOU LIKE TO TRY AGAIN ?";YN$: GOSUB 1290: IF  LEFT$(YN$,1) = "Y"  THEN 530
  97. 980  PRINT : INPUT "WOULD ANYONE ELSE LIKE TO TRY ?";YN$: IF  LEFT$(YN$,1) = "Y"  THEN  HOME :C = 0:T = 0: GOTO 500
  98. 990  TEXT : HOME : VTAB 12: PRINT "BYE-BYE "NA$: END 
  99. 1000  REM  DRAW MARKER AT MINUTE LOCATION
  100. 1010  IF X = 149  AND L = 1  THEN  XDRAW 11 AT X%(60),Y%(60): GOTO 1050
  101. 1020  IF X = 136  AND L = 60  THEN  XDRAW 11 AT X%(1),Y%(1): GOTO 1050
  102. 1030  IF X = 149  THEN  XDRAW 11 AT X%(L -1),Y%(L -1): GOTO 1050
  103. 1040  IF X = 136  THEN  XDRAW 11 AT X%(L +1),Y%(L +1)
  104. 1050  XDRAW 11 AT X%(L),Y%(L)
  105. 1060  POKE  -16368,0:TL = TL +1: IF TL/7 =  INT(TL/7)  THEN TL = 0:Y =  PEEK( -16336)
  106. 1070  IF L = 60  THEN R$ = "00": GOTO 1090
  107. 1080 R$ =  STR$(L): IF  LEN(R$) <2  THEN R$ = "0" +R$
  108. 1090  VTAB 23: CALL  -958: HTAB 15: PRINT "TIME - "HL%":"R$
  109. 1100  RETURN 
  110. 1110  REM  DRAW MINUTE HAND
  111. 1120  XDRAW 11 AT X%(L),Y%(L): HCOLOR= 3: HPLOT 135,87 TO X%(L),Y%(L)
  112. 1130 ML% = L
  113. 1140  RETURN 
  114. 1150  REM  DRAW MARKER AT HOUR LOCATION
  115. 1160  IF X = 149  AND HO = 1  THEN  XDRAW 11 AT HX%(34 +OS),HY%(34 +OS): GOTO 1200
  116. 1170  IF X = 136  AND HO = 12  THEN  XDRAW 11 AT HX%(1 +OS),HY%(1 +OS): GOTO 1200
  117. 1180  IF X = 149  THEN  XDRAW 11 AT HX%(L -3),HY%(L -3): GOTO 1200
  118. 1190  IF X = 136  THEN  XDRAW 11 AT HX%(L +3),HY%(L +3)
  119. 1200  XDRAW 11 AT HX%(L),HY%(L)
  120. 1210  POKE  -16368,0:TL = TL +1
  121. 1220  VTAB 23: CALL  -958: HTAB 15: PRINT "TIME - "HO":00"
  122. 1230  RETURN 
  123. 1240  REM  DRAW HOUR HAND
  124. 1250  XDRAW 11 AT HX%(L),HY%(L): HCOLOR= 3: HPLOT 135,87 TO HX%(L),HY%(L)
  125. 1260 HL% = HO
  126. 1270  RETURN 
  127. 1280  REM  ERASE CLOCK HANDS
  128. 1290  HCOLOR= 0: HPLOT 135,87 TO X%(ML%),Y%(ML%): HPLOT 135,87 TO HX%((HL% *3) +(OS -2)),HY%((HL% *3) +(OS -2))
  129. 1300  RETURN 
  130. 1310  REM  PLOT RANDOM TIME
  131. 1320  IF CL < >0  THEN 1370: REM  IF TIME CLOCK IN APPLE, READ TIME & SEED RND NUMBER GENERATOR
  132. 1330 H% =  INT( RND(1) *12) +1:M% =  INT( RND(1) *60) +1
  133. 1340  GOSUB 1610: REM  FIND OFFSET FOR HOUR HAND
  134. 1350  HPLOT X%(M%),Y%(M%) TO 135,87 TO HX%(H1%),HY%(H1%)
  135. 1360  RETURN 
  136. 1370  REM  READ TIME CLOCK IN SLOT CL
  137. 1380  PRINT  CHR$(4)"PR#"CL
  138. 1390  PRINT  CHR$(4)"IN#"CL
  139. 1400  INPUT "%";T$
  140. 1410  PRINT  CHR$(4)"PR#0"
  141. 1420  PRINT  CHR$(4)"IN#0"
  142. 1430 H% =  VAL( MID$ (T$,12,2)):M% =  VAL( MID$ (T$,15,2)): IF M% = 0  THEN M% = 60
  143. 1440 R =  RND(M% * -1)
  144. 1450  GOSUB 1610: REM  FIND OFFSET FOR HOUR HAND
  145. 1460  GOTO 1350
  146. 1470 H% =  VAL( MID$ (T$,12,2)):M% =  VAL( MID$ (T$,15,2)): GOTO 1350
  147. 1480  REM  PLACE CHARACTERS ON HIRES SCREEN
  148. 1490  XDRAW 12 AT 70,11: XDRAW 13 AT 103,11: XDRAW 14 AT 121,11: XDRAW 15 AT 154,11: XDRAW 16 AT 187,11
  149. 1500  XDRAW 17 AT 117,20: XDRAW 18 AT 146,20
  150. 1510  FOR I = 1 TO 15: XDRAW C%(I) AT LX%(I),LY%(I): NEXT 
  151. 1520  RETURN 
  152. 1530  REM  CENTERING ROUTINE
  153. 1540  HTAB 20 - LEN(A$)/2: PRINT A$: RETURN 
  154. 1550  REM  SOUND FOR CORRECT HOUR RESPONSE
  155. 1560  FOR P = 100 TO 10  STEP  -10: POKE 768,P: POKE 769,6: CALL 770: NEXT : RETURN 
  156. 1570  REM  SOUND FOR INCORRECT OVERALL RESPONSE
  157. 1580  FOR P = 1 TO 10: POKE 768,250: POKE 769,2: CALL 770: NEXT : RETURN 
  158. 1590  REM  SOUND FOR CORRECT OVERALL RESPONSE
  159. 1600  FOR P = 50 TO 20  STEP  -J: POKE 768,P: POKE 769,5: CALL 770: NEXT P: RETURN 
  160. 1610  IF M% <20  OR M% = 60  THEN H1% = (H% *3) -2
  161. 1620  IF M% > = 20  AND M% <40  THEN H1% = (H% *3) -1
  162. 1630  IF M% > = 40  AND M% <60  THEN H1% = (H% *3)
  163. 1640  RETURN 
  164. 1650  REM  DATA TO PLOT NUMBERS ON CLOCK FACE.
  165. 1660  DATA  2,161,40,3,182,63,4,191,90,5,182,117,6,165,138,7,132,150,8,98,138,9,79,117,10,73,90,2,78,63,1,84,63,2,98,40,2,103,40,2,129,30,3,136,30
  166. 1670  REM  DATA TO PLOT MINUTE HAND ON CLOCK FACE
  167. 1680  DATA  140,39,145,41,150,42,155,43,161,45,164,49,168,53,171,57,175,61,178,65,180,69,182,74,184,78,186,83,188,87
  168. 1690  DATA  186,91,184,96,182,100,180,105,178,109,175,113,172,117,169,121,166,125,163,129,157,131,152,132,146,134,141,135,135,137
  169. 1700  DATA  129,135,124,134,118,132,113,131,107,129,104,125,101,121,98,117,95,113,92,109,90,105,88,100,86,96,84,91,82,87
  170. 1710  DATA  84,83,86,78,88,74,90,69,92,65,95,61,98,57,101,53,104,49,107,45,113,43,118,42,124,41,129,39,135,37
  171. 1720  REM  DATA TO PLOT HOUR HAND ON CLOCK FACE.
  172. 1730  DATA  153,57,162,58,165,65,163,72,172,75,174,80,173,87,174,94,172,98,163,102,165,108,162,113,153,117,150,122,142,126,135,122
  173. 1740  DATA   128,126,120,122,117,117,108,113,105,108,107,102,98,98,96,94,97,87,96,80,98,75,107,72,105,65,108,58,117,57,120,52,128,50,135,52,142,50,150,52
  174. 1750  POKE 768,255: POKE 769,255: POKE 770,173: POKE 771,48: POKE 772,192: POKE 773,136: POKE 774,208: POKE 775,5: POKE 776,206: POKE 777,1: POKE 778,3: POKE 779,240
  175. 1760  POKE 780,9: POKE 781,202: POKE 782,208: POKE 783,245: POKE 784,174: POKE 785,0: POKE 786,3: POKE 787,76: POKE 788,2: POKE 789,3: POKE 790,96: RETURN